﻿using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Xml.Linq;
using SERIX.Util;
using Biblioteca.DataBase;
using Pms.Utils;
using System.Data.OracleClient;

namespace SERIX
{
    /*
     * Autor      : IT-Developer1    
     * Data       : 02/04/2010 11:03:48
     * Descricao  : 
     * Alteracoes : 
     * 
     */
    public class CriteriosPesquisaValBenef : CriteriosPesquisa
    {
        public string Ano { get; set; }
        public string Mes { get; set; }
        public string IdtBeneficiario { get; set; }
        public string Beneficiario { get; set; }
        public string IdtPropriedade { get; set; }
        public string IdtTecnico { get; set; }
        public string Tecnico { get; set; }        
        public string IdtPrograma { get; set; }
        public string IdtAcao { get; set; }
        public string IdtIndicador { get; set; }
    }

    public partial class ValoresBeneficiariosManut : Seguranca
    {
        CriteriosPesquisaValBenef criteriosPesquisa;

        private void lovSelecaoTecnico(string chave, string descricao)
        {
            txtNomeTecnico.Text = descricao;
            txtNomeTecnico.Attributes.Add("chave", chave);
        }

        private void lovSelecaoBeneficiarios(string chave, string descricao)
        {
            txtBeneficiario.Text = descricao;
            txtBeneficiario.Attributes.Add("chave", chave);

            SqlPropriedades.SelectParameters["P_IDT_BENEF"].DefaultValue = chave;
            ddlPropriedades.DataBind();
            ddlPropriedades.Items.Insert(0, new ListItem());

            ddlProgramas.Items.Clear();
            ddlAcoes.Items.Clear();
            ddlIndicadores.Items.Clear();
        }

        protected void ddlPropriedades_SelectedIndexChanged(object sender, EventArgs e)
        {
            ddlProgramas.Items.Clear();

            SqlProgramas.SelectParameters["P_IDT_PROP"].DefaultValue = ddlPropriedades.SelectedValue;
            ddlProgramas.DataBind();
            ddlProgramas.Items.Insert(0, new ListItem());

            ddlAcoes.Items.Clear();
            ddlIndicadores.Items.Clear();
        }

        protected void ddlProgramas_SelectedIndexChanged(object sender, EventArgs e)
        {
            ddlAcoes.Items.Clear();

            SqlAcoesPrograma.SelectParameters["PARAM"].DefaultValue = ddlProgramas.SelectedValue;
            ddlAcoes.DataBind();
            ddlAcoes.Items.Insert(0, new ListItem());

            ddlIndicadores.Items.Clear();
        }

        protected void ddlAcoes_SelectedIndexChanged(object sender, EventArgs e)
        {
            ddlIndicadores.Items.Clear();

            SqlIndicadoresAcao.SelectParameters["PARAM"].DefaultValue = ddlAcoes.SelectedValue;
            ddlIndicadores.DataBind();
            ddlIndicadores.Items.Insert(0, new ListItem());
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            base.OnLoad(e);
            InicializarCriteriosPesquisa();

            LovBeneficiarios.Selecao += new SERIX.Controles.lovBeneficiarios.SelecaoDelegate(lovSelecaoBeneficiarios);

            lovTecnicos.Selecao += new SERIX.Controles.lovGenerica.SelecaoDelegate(lovSelecaoTecnico);
            lovTecnicos.ConfigurarLov("Serix", "SRX_TECNICOS", "IDT_TEC", "NOM_TEC", "NOM_TEC", "Pesquisa de Técnicos", "Nome");

            string login = usuAut.Login;

            Query qy = null;
            try
            {
                Session["PagAtual"] = 1;
                string SQL = @"SELECT IDT_TEC, NOM_TEC
                                    FROM SRX_TECNICOS
                                    WHERE IDT_TEC = F_OBTER_IDT_TEC_LOGADO";
                try
                {
                    qy = new Query(BiblioPMS.ObterConexao(BiblioPMS.aplicacaoSNG, login, BiblioPMS.Demo), SQL);

                    DataTable dttTecnico = qy.ObterDataTable();

                    if (dttTecnico.Rows.Count > 0)
                    {
                        txtNomeTecnico.Text = dttTecnico.Rows[0]["NOM_TEC"].ToString();
                        txtNomeTecnico.Attributes.Add("chave", dttTecnico.Rows[0]["IDT_TEC"].ToString());
                    }
                }
                catch
                {
                    if (qy.EstadoConexao() == ConnectionState.Open)
                        qy.FecharConexao();
                }
                finally
                {
                    if (qy.EstadoConexao() == ConnectionState.Open)
                        qy.FecharConexao();
                }
            }
            catch
            //Em caso de erro, mostre todos
            {
                if (qy.EstadoConexao() == ConnectionState.Open)
                    qy.FecharConexao();
            }

            if (!RestaurarPesquisa() && !Page.IsPostBack)
            {
                SalvarPesquisa();
                Session["PagAtual"] = 1;
            }
        }

        private void InicializarCriteriosPesquisa()
        {
            criteriosPesquisa = (CriteriosPesquisaValBenef)Session[Page.ToString()];
        }

        private void SalvarPesquisa()
        {
            if (criteriosPesquisa == null)
            {
                criteriosPesquisa = new CriteriosPesquisaValBenef() { FiltroSimples = "", PaginaAtual = 1 };
                Session[Page.ToString()] = criteriosPesquisa;
            }
            else
            {
                //criteriosPesquisa.FiltroSimples = txtFiltrar.Text;
                criteriosPesquisa.Ano = txtAno.Text;
                criteriosPesquisa.Mes = ddlMeses.SelectedValue;
                criteriosPesquisa.IdtBeneficiario = txtBeneficiario.Attributes["chave"].ToString();
                criteriosPesquisa.Beneficiario = txtBeneficiario.Text;
                criteriosPesquisa.IdtPropriedade = ddlPropriedades.SelectedValue;
                criteriosPesquisa.IdtTecnico = txtNomeTecnico.Attributes["chave"].ToString();
                criteriosPesquisa.Tecnico = txtNomeTecnico.Text;
                criteriosPesquisa.IdtPrograma = ddlProgramas.SelectedValue;
                criteriosPesquisa.IdtAcao = ddlAcoes.SelectedValue;
                criteriosPesquisa.IdtIndicador = ddlIndicadores.SelectedValue;
                criteriosPesquisa.PaginaAtual = 1;
            }
        }

        private bool RestaurarPesquisa()
        {
            if (!IsPostBack && criteriosPesquisa != null)
            {
                txtAno.Text = criteriosPesquisa.Ano;
                ddlMeses.SelectedValue = criteriosPesquisa.Mes;

                txtBeneficiario.Attributes["chave"] = criteriosPesquisa.IdtBeneficiario;
                txtBeneficiario.Text = criteriosPesquisa.Beneficiario;

                SqlPropriedades.SelectParameters["P_IDT_BENEF"].DefaultValue = criteriosPesquisa.IdtBeneficiario;
                ddlPropriedades.DataBind();
                ddlPropriedades.Items.Insert(0, new ListItem());
                ddlPropriedades.SelectedValue = criteriosPesquisa.IdtPrograma;

                txtNomeTecnico.Attributes["chave"] = criteriosPesquisa.IdtTecnico;
                txtNomeTecnico.Text = criteriosPesquisa.Tecnico;

                SqlProgramas.SelectParameters["P_IDT_PROP"].DefaultValue = criteriosPesquisa.IdtPropriedade;
                ddlProgramas.DataBind();
                ddlProgramas.Items.Insert(0, new ListItem());
                ddlProgramas.SelectedValue = criteriosPesquisa.IdtPrograma;

                SqlAcoesPrograma.SelectParameters["PARAM"].DefaultValue = criteriosPesquisa.IdtPrograma;
                ddlAcoes.DataBind();
                ddlAcoes.Items.Insert(0, new ListItem());
                ddlAcoes.SelectedValue = criteriosPesquisa.IdtAcao;

                SqlIndicadoresAcao.SelectParameters["PARAM"].DefaultValue = criteriosPesquisa.IdtAcao;
                ddlIndicadores.DataBind();
                ddlIndicadores.Items.Insert(0, new ListItem());
                ddlIndicadores.SelectedValue = criteriosPesquisa.IdtIndicador;

                Pesquisar();
                return true;
            }
            return false;
        }

        protected void Pesquisar()
        {
            string login = usuAut.Login;
            OracleConnection conexao = null;
            OracleCommand comando = null;
            try
            {
                conexao = BiblioPMS.ObterConexao(BiblioPMS.aplicacaoSNG, login, BiblioPMS.Demo);

                comando = new OracleCommand();
                comando.CommandText = "P_INI_VAL_BENEF";
                comando.CommandType = CommandType.StoredProcedure;
                comando.Connection = conexao;

                comando.Parameters.Add(new OracleParameter("P_ANO", txtAno.Text));
                comando.Parameters.Add(new OracleParameter("P_MES", ddlMeses.SelectedValue));
                comando.Parameters.Add(new OracleParameter("P_IDT_TEC", txtNomeTecnico.Attributes["chave"].ToString()));
                comando.Parameters.Add(new OracleParameter("P_IDT_PROG", ddlProgramas.SelectedValue));
                comando.Parameters.Add(new OracleParameter("P_IDT_ACAO", ddlAcoes.SelectedValue));
                comando.Parameters.Add(new OracleParameter("P_IDT_IND", ddlIndicadores.SelectedValue));
                comando.Parameters.Add(new OracleParameter("P_IDT_BENEF", txtBeneficiario.Attributes["chave"].ToString()));
                comando.Parameters.Add(new OracleParameter("P_IDT_PROP", ddlPropriedades.SelectedValue));

                comando.ExecuteNonQuery();

                lblErro.Text = string.Format("Situação alterada com sucesso! Em {0}", DateTime.Now.ToLongTimeString());
                lblErro.Visible = true;
            }
            catch (Exception ex)
            {
                lblErro.Text = string.Format("*Erro: Problema na alteração da situação da RME! {0}. Em {1}", ex.Message, DateTime.Now.ToLongTimeString());
                lblErro.Visible = true;
            }
            finally
            {
                if (conexao.State == ConnectionState.Open)
                    conexao.Close();
                comando.Dispose();
                conexao = null;
                comando = null;
            }
            
            Query qy = null;
            try
            {
                //Se o filtro nao estiver vazio 
                if (ddlIndicadores.SelectedValue != "")
                {
                    Session["PagAtual"] = 1;
                    lblFiltro.Text = "Filtro: Valores por Beneficiário";
                    string SQL = @"SELECT VB.DSC_TPO_OPCAO TIT_DESCRICAO, VB.DSC_OPCAO DESCRICAO, VB.UNIDADE, VB.META, 
                                          VB.VALOR_RATEIO, B.NOM_BENEF, P.NOME_PROP, VB.Idt_Benef, VB.IDT_IND, 
                                          VB.IDT_TPO_MED, VB.IDT_LOTACAO, VB.IDT_DESC, P.IDT_PROP, TOTAL_PROD_IND PRODUCAO
                                    FROM Serix.SRX_V_RELAT_BENEFICIARIOS VB JOIN 
                                         Serix.SRX_BENEFICIARIOS B ON (VB.Idt_Benef = B.Idt_Benef) JOIN 
                                         Serix.SRX_PROPRIEDADES P ON (VB.IDT_PROP = P.IDT_PROP)
                                    WHERE VB.ANO = :P_ANO AND VB.MES = :P_MES AND 
                                          VB.Idt_Benef = :P_IDT_BENEF AND
                                          VB.IDT_PROP = :P_IDT_PROP AND
                                          VB.IDT_IND = :P_IDT_IND AND 
                                          VB.IDT_PROG = :P_IDT_PROG AND VB.IDT_ACAO = :P_IDT_ACAO AND
                                          VB.IDT_TEC = :P_IDT_TEC
                                    ORDER BY DSC_TPO_OPCAO, DSC_OPCAO, NOM_BENEF, NOME_PROP";
                    try
                    {
                        qy = new Query(BiblioPMS.ObterConexao(BiblioPMS.aplicacaoSNG, login, BiblioPMS.Demo), SQL);
                        qy.AdicionarParametro("P_ANO", DbType.String, txtAno.Text);
                        qy.AdicionarParametro("P_MES", DbType.String, ddlMeses.SelectedValue);
                        qy.AdicionarParametro("P_IDT_BENEF", DbType.String, txtBeneficiario.Attributes["chave"].ToString());
                        qy.AdicionarParametro("P_IDT_PROP", DbType.String, ddlPropriedades.SelectedValue);
                        qy.AdicionarParametro("P_IDT_PROG", DbType.String, ddlProgramas.SelectedValue);
                        qy.AdicionarParametro("P_IDT_ACAO", DbType.String, ddlAcoes.SelectedValue);
                        qy.AdicionarParametro("P_IDT_IND", DbType.String, ddlIndicadores.SelectedValue);
                        qy.AdicionarParametro("P_IDT_TEC", DbType.String, txtNomeTecnico.Attributes["chave"].ToString());
                        gridView.DataSource = qy.ObterDataTable();
                        gridView.DataBind();
                    }
                    catch
                    {
                        if (qy.EstadoConexao() == ConnectionState.Open)
                            qy.FecharConexao();
                    }
                    finally
                    {
                        if (qy.EstadoConexao() == ConnectionState.Open)
                            qy.FecharConexao();
                    }
                }
            }
            catch
            //Em caso de erro, mostre todos
            {
                if (qy.EstadoConexao() == ConnectionState.Open)
                    qy.FecharConexao();
            }
        }

        protected void btnPequisar_Click(object sender, EventArgs e)
        {
            SalvarPesquisa();
            Pesquisar();
        }

        protected void Ok_Button_Click(object sender, EventArgs e)
        {
            string login = usuAut.Login;
            OracleConnection conexao = null;
            OracleCommand comando = null;
            OracleTransaction transacao = null;
            try
            {
                conexao = BiblioPMS.ObterConexao(BiblioPMS.aplicacaoSNG, login, BiblioPMS.Demo);

                comando = new OracleCommand();
                comando.CommandText = "P_MANTER_VAL_BENEF";
                comando.CommandType = CommandType.StoredProcedure;
                comando.Connection = conexao;

                comando.Parameters.Add(new OracleParameter("P_ANO", OracleType.Number));
                comando.Parameters.Add(new OracleParameter("P_MES", OracleType.Number));
                comando.Parameters.Add(new OracleParameter("P_IDT_BENEF", OracleType.Number));
                comando.Parameters.Add(new OracleParameter("P_IDT_PROP", OracleType.Number));
                comando.Parameters.Add(new OracleParameter("P_IDT_IND", OracleType.Number));
                comando.Parameters.Add(new OracleParameter("P_IDT_TPO_MED", OracleType.Number));
                comando.Parameters.Add(new OracleParameter("P_IDT_LOTACAO", OracleType.Number));
                comando.Parameters.Add(new OracleParameter("P_IDT_DESC", OracleType.Number));
                comando.Parameters.Add(new OracleParameter("P_VALOR", OracleType.Number));

                transacao = conexao.BeginTransaction();
                comando.Transaction = transacao;

                string idtBenef, idtProp, idtInd, idtTpoMed, idtLotacao, idtDesc, valor;
                foreach (GridViewRow row in gridView.Rows)
                {
                    idtBenef = ((Label)row.FindControl("lblIdtBenef")).Text;
                    idtProp = ((Label)row.FindControl("lblIdtProp")).Text;
                    idtInd = ((Label)row.FindControl("lblIdtInd")).Text;
                    idtTpoMed = ((Label)row.FindControl("lblIdtTpoMed")).Text;
                    idtLotacao = ((Label)row.FindControl("lblIdtLotacao")).Text;
                    idtDesc = ((Label)row.FindControl("lblIdtDesc")).Text;
                    valor = ((TextBox)row.FindControl("txtValorRateio")).Text;

                    comando.Parameters["P_ANO"].Value = txtAno.Text;
                    comando.Parameters["P_MES"].Value = ddlMeses.SelectedValue;
                    comando.Parameters["P_IDT_BENEF"].Value = idtBenef;
                    comando.Parameters["P_IDT_PROP"].Value = idtProp;
                    comando.Parameters["P_IDT_IND"].Value = idtInd;
                    comando.Parameters["P_IDT_TPO_MED"].Value = idtTpoMed;
                    comando.Parameters["P_IDT_LOTACAO"].Value = idtLotacao;

                    if (string.IsNullOrEmpty(idtDesc))
                        comando.Parameters["P_IDT_DESC"].Value = DBNull.Value;
                    else
                        comando.Parameters["P_IDT_DESC"].Value = idtDesc;

                    comando.Parameters["P_VALOR"].Value = valor;

                    comando.ExecuteNonQuery();
                }
                transacao.Commit();

                lblErro.Text = string.Format("Atualização realizada com sucesso! Em {0}", DateTime.Now.ToLongTimeString());
                lblErro.Visible = true;
            }
            catch (Exception ex)
            {
                transacao.Rollback();
                lblErro.Text = string.Format("*Erro: Problema na alteração dos valores por beneficiário! {0}. Em {1}", ex.Message, DateTime.Now.ToLongTimeString());
                lblErro.Visible = true;
            }
            finally
            {
                if (conexao.State == ConnectionState.Open)
                    conexao.Close();
                transacao.Dispose();
                comando.Dispose();
                conexao = null;
                transacao = null;
                comando = null;
            }
        }

        protected void Cancelar_Button_Click(object sender, EventArgs e)
        {
            btnPequisar_Click(sender, e);
        }

        protected void btnLimpar_Click(object sender, EventArgs e)
        {
            LimparCriterios();
            SalvarPesquisa();
            gridView.DataSource = null;
            gridView.DataBind();
        }

        private void LimparCriterios()
        {
            criteriosPesquisa = null;

            txtBeneficiario.Text = "";
            txtBeneficiario.Attributes.Clear();

            txtNomeTecnico.Text = "";
            txtNomeTecnico.Attributes.Clear();

            ddlProgramas.Items.Clear();
            ddlAcoes.Items.Clear();
            ddlIndicadores.Items.Clear();
        }

        protected void imbExcluirValor_Click(object sender, ImageClickEventArgs e)
        {
            string login = usuAut.Login;
            OracleConnection conexao = null;
            OracleCommand comando = null;
            try
            {
                conexao = BiblioPMS.ObterConexao(BiblioPMS.aplicacaoSNG, login, BiblioPMS.Demo);

                comando = new OracleCommand();
                comando.CommandText = "P_EXCLUIR_VAL_BENEF";
                comando.CommandType = CommandType.StoredProcedure;
                comando.Connection = conexao;

                GridViewRow row = (GridViewRow)((ImageButton)sender).Parent.Parent;

                string idtBenef, idtProp, idtInd, idtTpoMed, idtLotacao, idtDesc;
                idtBenef = ((Label)row.FindControl("lblIdtBenef")).Text;
                idtProp = ((Label)row.FindControl("lblIdtProp")).Text;
                idtInd = ((Label)row.FindControl("lblIdtInd")).Text;
                idtTpoMed = ((Label)row.FindControl("lblIdtTpoMed")).Text;
                idtLotacao = ((Label)row.FindControl("lblIdtLotacao")).Text;
                idtDesc = ((Label)row.FindControl("lblIdtDesc")).Text;

                comando.Parameters.Add(new OracleParameter("P_ANO", txtAno.Text));
                comando.Parameters.Add(new OracleParameter("P_MES", ddlMeses.SelectedValue));
                comando.Parameters.Add(new OracleParameter("P_IDT_BENEF", idtBenef));
                comando.Parameters.Add(new OracleParameter("P_IDT_PROP", idtProp));
                comando.Parameters.Add(new OracleParameter("P_IDT_IND", idtInd));
                comando.Parameters.Add(new OracleParameter("P_IDT_TPO_MED", idtTpoMed));
                comando.Parameters.Add(new OracleParameter("P_IDT_LOTACAO", idtLotacao));
                if (string.IsNullOrEmpty(idtDesc))
                    comando.Parameters.Add(new OracleParameter("P_IDT_DESC", DBNull.Value));
                else
                    comando.Parameters.Add(new OracleParameter("P_IDT_DESC", idtDesc));
                comando.ExecuteNonQuery();

                lblErro.Text = string.Format("Lançamento excluído com sucesso! Em {0}", DateTime.Now.ToLongTimeString());
                lblErro.Visible = true;

                // Atualizando o grid...
                Pesquisar();
            }
            catch (Exception ex)
            {
                lblErro.Text = string.Format("*Erro: Problema na exclusão do lançamento! {0}. Em {1}", ex.Message, DateTime.Now.ToLongTimeString());
                lblErro.Visible = true;
            }
            finally
            {
                if (conexao.State == ConnectionState.Open)
                    conexao.Close();
                comando.Dispose();
                conexao = null;
                comando = null;
            }
        }

        protected void gridView_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            //TODO: ver a questão da segurança...
            //if (e.Row.RowType == DataControlRowType.DataRow)
            //{
            //    //SEGURANÇA
            //    ((HyperLink)e.Row.Cells[gridView.Columns.Count - 3].Controls[1]).Enabled = !PermissaoManut.Equals(Constantes.PERM_NEGADA);
            //    ((HyperLink)e.Row.Cells[gridView.Columns.Count - 2].Controls[1]).Enabled = PermissaoManut.Equals(Constantes.PERM_MANUTENCAO);
            //    ((HyperLink)e.Row.Cells[gridView.Columns.Count - 1].Controls[1]).Enabled = PermissaoManut.Equals(Constantes.PERM_MANUTENCAO);
            //}
        }

        protected void lblErro_Load(object sender, EventArgs e)
        {
            lblErro.Text = "";
            lblErro.Visible = false;
        }

        protected void txtAno_PreRender(object sender, EventArgs e)
        {
            if (!IsPostBack && string.IsNullOrEmpty(txtAno.Text))
                txtAno.Text = DateTime.Today.Year.ToString();
        }

        protected void ddlMeses_PreRender(object sender, EventArgs e)
        {
            if (!IsPostBack && string.IsNullOrEmpty(ddlMeses.SelectedValue))
                ddlMeses.SelectedValue = DateTime.Today.Month.ToString();
        }
    }
}
